package com.xygz.orm.internal;

import com.xygz.orm.SColumn;
import com.xygz.orm.SFunc;
import com.xygz.orm.ToSQL;
import com.xygz.orm.exception.ORMCheckException;

import java.util.List;

/**
 * SQL 查询器
 *
 * @author xiyuan-lgz 2023-11-01 @version v1.0.0 新建与整理
 */
public interface Select<E, Child extends Select<E, Child>> extends ToSQL {
    
    /**
     * 获取泛型类型
     *
     * @return 表类型
     */
    public Class<E> getRawType();
    
    /**
     * 获取查询的列信息
     *
     * @return 列信息
     */
    public List<SColumn> getColumns();
    /****************************************/
    /*******指定查询列*************************/
    /****************************************/
    
    /**
     * 查询条去重
     *
     * @return                      当前查询器
     */
    public Child distinct();
    
    /**
     * 设置去重
     *
     * @param distinct              是否去重 true 表示去重，false 取消去重
     * @return 当前查询器
     */
    public Child distinct(boolean distinct);
    
    
    /**
     * 设置表别名
     *
     * @param alias                 表别名
     * @return                      当前查询器
     * @throws  ORMCheckException   当 表名为空或者不规范时 抛出异常
     */
    public Child as(String alias) throws ORMCheckException;
    
    /**
     * 获取表别名
     * @return 表别名，
     */
    public String as();
    
   
}
